/*
 * N-Step-SCAN.h
 *
 *  Created on: 15/11/2011
 *      Author: utn_so
 */

#ifndef N_STEP_SCAN_H_
#define N_STEP_SCAN_H_

#include "libPPD.h"

// poner en lib!!!
// Del raid
struct NodoNListaRAID {
    int32_t cantPedidos;
    t_listaPRAID *sublistaN;
    struct NodoNListaRAID *next;
};

typedef struct NodoNListaRAID tNodoNListaRAID;

typedef struct {
    tNodoNListaRAID *head;
}tNListaPRAID; // lista de sublistas, las sublistas son de longuitud n que tienen cada peticion planificada.

// Del fs
struct NodoNListaPFS {
    int32_t cantPedidos;
    t_listaPFS *sublistaN;
    struct NodoNListaPFS *next;
};

typedef struct NodoNListaPFS tNodoNListaPFS;

typedef struct {
    tNodoNListaPFS *head;
}tNListaPFS; // lista de sublistas, las sublistas son de longuitud n que tienen cada peticion planificada.


void ejemploAlgFS ();
void ejemploAlgRAID ();
void sincronizarListas ();
void informacionNStepSCAN (int32_t nroSector, char **trace);
// Para el raid
int32_t planificarN_Step_SCAN_RAID (t_NIPC paquete);
void agregarNodoNListaPRAID (int32_t posicion, t_NIPC paquete);
void crearNListaPRAID ();
void agregarPedidosPRAID (t_listaPRAID *sublista, t_NIPC paquete);
void agregarListaPRAID(int32_t posicion, t_listaPRAID *sublista, t_NIPC paqueteNuevo);
void despuesDelCabezalAscendentePRAID (t_listaPRAID *sublista, t_NIPC paqueteNuevo);
void antesDelCabezalAscendentePRAID (t_listaPRAID *sublista, t_NIPC paqueteNuevo);
void antesDelCabezalDescendentePRAID (t_listaPRAID *sublista, t_NIPC paqueteNuevo);
void despuesDelCabezalDescendentePRAID (t_listaPRAID *sublista, t_NIPC paqueteNuevo);
void sublistaLlenaAListaPedidosPRAID ();

// Para el fs
int32_t planificarN_Step_SCAN_PFS (t_NIPC paquete, int32_t socketFD);
void agregarNodoNListaPFS (int32_t posicion, t_NIPC paquete, int32_t socketFD);
void crearNListaPFS ();
void agregarPedidosPFS (t_listaPFS *sublista, t_NIPC paquete, int32_t socketFD);
void agregarListaPFS(int32_t posicion, t_listaPFS *sublista, t_NIPC paqueteNuevo, int32_t socketFD);
void despuesDelCabezalAscendentePFS (t_listaPFS *sublista, t_NIPC paqueteNuevo, int32_t socketFD);
void antesDelCabezalAscendentePFS (t_listaPFS *sublista, t_NIPC paqueteNuevo, int32_t socketFD);
void antesDelCabezalDescendentePFS (t_listaPFS *sublista, t_NIPC paqueteNuevo, int32_t socketFD);
void despuesDelCabezalDescendentePFS (t_listaPFS *sublista, t_NIPC paqueteNuevo, int32_t socketFD);
void sublistaLlenaAListaPedidosPFS ();

#endif /* N_STEP_SCAN_H_ */
